#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/select.h>
#include<errno.h>

int main(){
    //1.定义描述符集合
    fd_set rfds;
    FD_ZERO(&rfds);
    int maxfd=1;
    //3.定义时间结构
    while(1){
        //2.将描述符添加到集合中,因为每次监控都会移除没有就绪的描述符
        FD_SET(0,&rfds);
        //select会修改时间结构，因此需要每次重新设置
        struct timeval tv={.tv_sec=3,.tv_usec=0};
        int ret=select(maxfd,&rfds,NULL,NULL,&tv);
        if(ret<0){
            perror("select error");
            if(errno==EINTR){continue;}
            return -1;
        }
        else if(ret==0){
            printf("select timeout!\n");
            continue;
        }
        //从0号描述符开始到最大逐个判断
        for(int i=0;i<maxfd;i++){
            if(FD_ISSET(i,&rfds)){
                char buf[1024]={0};
                int res=read(i,buf,1023);
                if(res<0){
                    perror("read error");
                    return -1;
                }
                printf("read buf:[%s]\n",buf);
            }
        }
    }
    return 0;
}